Hệ thống xếp lịch học tín chỉ cho sinh viên CNTT trên PHP & MySQL
111.133 lượt xem;
- departments_dml.php
- project /
1 <?php
2
3 // Data functions (insert, update, delete, form) for table departments
4
5 // This script and data application were generated by AppGini 5.72
6 // Download AppGini for free from https://bigprof.com/appgini/download/
7
8 function departments_insert(){
9 global $Translation;
10
11 // mm: can member insert record?
12 $arrPerm=getTablePermissions('departments');
13 if(!$arrPerm[1]){
14 return false;
15 }
16
17 $data['name'] = makeSafe($_REQUEST['name']);
18 if($data['name'] == empty_lookup_value){ $data['name'] = ''; }
19 $data['school'] = makeSafe($_REQUEST['school']);
20 if($data['school'] == empty_lookup_value){ $data['school'] = ''; }
21 if($data['name']== ''){
22 echo StyleSheet() . "\n\n<div class=\"alert alert-danger\">" . $Translation['error:'] . " 'Name': " . $Translation['field not null'] . '<br><br>';
23 echo '<a href="" onclick="history.go(-1); return false;">'.$Translation['< back'].'</a></div>';
24 exit;
25 }
26 if($data['school']== ''){
27 echo StyleSheet() . "\n\n<div class=\"alert alert-danger\">" . $Translation['error:'] . " 'School': " . $Translation['field not null'] . '<br><br>';
28 echo '<a href="" onclick="history.go(-1); return false;">'.$Translation['< back'].'</a></div>';
29 exit;
30 }
31
32 // hook: departments_before_insert
33 if(function_exists('departments_before_insert')){
34 $args=array();
35 if(!departments_before_insert($data, getMemberInfo(), $args)){ return false; }
36 }
37
38 $o = array('silentErrors' => true);
39 sql('insert into `departments` set `name`=' . (($data['name'] !== '' && $data['name'] !== NULL) ? "'{$data['name']}'" : 'NULL') . ', `school`=' . (($data['school'] !== '' && $data['school'] !== NULL) ? "'{$data['school']}'" : 'NULL'), $o);
40 if($o['error']!=''){
41 echo $o['error'];
42 echo "<a href=\"departments_view.php?addNew_x=1\">{$Translation['< back']}</a>";
43 exit;
44 }
45
46 $recID = db_insert_id(db_link());
47
48 // hook: departments_after_insert
49 if(function_exists('departments_after_insert')){
50 $res = sql("select * from `departments` where `id`='" . makeSafe($recID, false) . "' limit 1", $eo);
51 if($row = db_fetch_assoc($res)){
52 $data = array_map('makeSafe', $row);
53 }
54 $data['selectedID'] = makeSafe($recID, false);
55 $args=array();
56 if(!departments_after_insert($data, getMemberInfo(), $args)){ return $recID; }
57 }
58
59 // mm: save ownership data
60 set_record_owner('departments', $recID, getLoggedMemberID());
61
62 return $recID;
63 }
64
65 function departments_delete($selected_id, $AllowDeleteOfParents=false, $skipChecks=false){
66 // insure referential integrity ...
67 global $Translation;
68 $selected_id=makeSafe($selected_id);
69
70 // mm: can member delete record?
71 $arrPerm=getTablePermissions('departments');
72 $ownerGroupID=sqlValue("select groupID from membership_userrecords where tableName='departments' and pkValue='$selected_id'");
73 $ownerMemberID=sqlValue("select lcase(memberID) from membership_userrecords where tableName='departments' and pkValue='$selected_id'");
74 if(($arrPerm[4]==1 && $ownerMemberID==getLoggedMemberID()) || ($arrPerm[4]==2 && $ownerGroupID==getLoggedGroupID()) || $arrPerm[4]==3){ // allow delete?
75 // delete allowed, so continue ...
76 }else{
77 return $Translation['You don\'t have enough permissions to delete this record'];
78 }
79
80 // hook: departments_before_delete
81 if(function_exists('departments_before_delete')){
82 $args=array();
83 if(!departments_before_delete($selected_id, $skipChecks, getMemberInfo(), $args))
84 return $Translation['Couldn\'t delete this record'];
85 }
86
87 // child table: class_time_table
88 $res = sql("select `id` from `departments` where `id`='$selected_id'", $eo);
89 $id = db_fetch_row($res);
90 $rires = sql("select count(1) from `class_time_table` where `department`='".addslashes($id[0])."'", $eo);
91 $rirow = db_fetch_row($rires);
92 if($rirow[0] && !$AllowDeleteOfParents && !$skipChecks){
93 $RetMsg = $Translation["couldn't delete"];
94 $RetMsg = str_replace("<RelatedRecords>", $rirow[0], $RetMsg);
95 $RetMsg = str_replace("<TableName>", "class_time_table", $RetMsg);
96 return $RetMsg;
97 }elseif($rirow[0] && $AllowDeleteOfParents && !$skipChecks){
98 $RetMsg = $Translation["confirm delete"];
99 $RetMsg = str_replace("<RelatedRecords>", $rirow[0], $RetMsg);
100 $RetMsg = str_replace("<TableName>", "class_time_table", $RetMsg);
101 $RetMsg = str_replace("<Delete>", "<input type=\"button\" class=\"button\" value=\"".$Translation['yes']."\" onClick=\"window.location='departments_view.php?SelectedID=".urlencode($selected_id)."&delete_x=1&confirmed=1';\">", $RetMsg);
102 $RetMsg = str_replace("<Cancel>", "<input type=\"button\" class=\"button\" value=\"".$Translation['no']."\" onClick=\"window.location='departments_view.php?SelectedID=".urlencode($selected_id)."';\">", $RetMsg);
103 return $RetMsg;
104 }
105
106 // child table: exam_time_table
107 $res = sql("select `id` from `departments` where `id`='$selected_id'", $eo);
108 $id = db_fetch_row($res);
109 $rires = sql("select count(1) from `exam_time_table` where `department`='".addslashes($id[0])."'", $eo);
110 $rirow = db_fetch_row($rires);
111 if($rirow[0] && !$AllowDeleteOfParents && !$skipChecks){
112 $RetMsg = $Translation["couldn't delete"];
113 $RetMsg = str_replace("<RelatedRecords>", $rirow[0], $RetMsg);
114 $RetMsg = str_replace("<TableName>", "exam_time_table", $RetMsg);
115 return $RetMsg;
116 }elseif($rirow[0] && $AllowDeleteOfParents && !$skipChecks){
117 $RetMsg = $Translation["confirm delete"];
118 $RetMsg = str_replace("<RelatedRecords>", $rirow[0], $RetMsg);
119 $RetMsg = str_replace("<TableName>", "exam_time_table", $RetMsg);
120 $RetMsg = str_replace("<Delete>", "<input type=\"button\" class=\"button\" value=\"".$Translation['yes']."\" onClick=\"window.location='departments_view.php?SelectedID=".urlencode($selected_id)."&delete_x=1&confirmed=1';\">", $RetMsg);
121 $RetMsg = str_replace("<Cancel>", "<input type=\"button\" class=\"button\" value=\"".$Translation['no']."\" onClick=\"window.location='departments_view.php?SelectedID=".urlencode($selected_id)."';\">", $RetMsg);
122 return $RetMsg;
123 }
124
125 // child table: student_details
126 $res = sql("select `id` from `departments` where `id`='$selected_id'", $eo);
127 $id = db_fetch_row($res);
128 $rires = sql("select count(1) from `student_details` where `department`='".addslashes($id[0])."'", $eo);
129 $rirow = db_fetch_row($rires);
130 if($rirow[0] && !$AllowDeleteOfParents && !$skipChecks){
131 $RetMsg = $Translation["couldn't delete"];
132 $RetMsg = str_replace("<RelatedRecords>", $rirow[0], $RetMsg);
133 $RetMsg = str_replace("<TableName>", "student_details", $RetMsg);
134 return $RetMsg;
135 }elseif($rirow[0] && $AllowDeleteOfParents && !$skipChecks){
136 $RetMsg = $Translation["confirm delete"];
137 $RetMsg = str_replace("<RelatedRecords>", $rirow[0], $RetMsg);
138 $RetMsg = str_replace("<TableName>", "student_details", $RetMsg);
139 $RetMsg = str_replace("<Delete>", "<input type=\"button\" class=\"button\" value=\"".$Translation['yes']."\" onClick=\"window.location='departments_view.php?SelectedID=".urlencode($selected_id)."&delete_x=1&confirmed=1';\">", $RetMsg);
140 $RetMsg = str_replace("<Cancel>", "<input type=\"button\" class=\"button\" value=\"".$Translation['no']."\" onClick=\"window.location='departments_view.php?SelectedID=".urlencode($selected_id)."';\">", $RetMsg);
141 return $RetMsg;
142 }
143
144 // child table: notices
145 $res = sql("select `id` from `departments` where `id`='$selected_id'", $eo);
146 $id = db_fetch_row($res);
147 $rires = sql("select count(1) from `notices` where `department`='".addslashes($id[0])."'", $eo);
148 $rirow = db_fetch_row($rires);
149 if($rirow[0] && !$AllowDeleteOfParents && !$skipChecks){
150 $RetMsg = $Translation["couldn't delete"];
151 $RetMsg = str_replace("<RelatedRecords>", $rirow[0], $RetMsg);
152 $RetMsg = str_replace("<TableName>", "notices", $RetMsg);
153 return $RetMsg;
154 }elseif($rirow[0] && $AllowDeleteOfParents && !$skipChecks){
155 $RetMsg = $Translation["confirm delete"];
156 $RetMsg = str_replace("<RelatedRecords>", $rirow[0], $RetMsg);
157 $RetMsg = str_replace("<TableName>", "notices", $RetMsg);
158 $RetMsg = str_replace("<Delete>", "<input type=\"button\" class=\"button\" value=\"".$Translation['yes']."\" onClick=\"window.location='departments_view.php?SelectedID=".urlencode($selected_id)."&delete_x=1&confirmed=1';\">", $RetMsg);
159 $RetMsg = str_replace("<Cancel>", "<input type=\"button\" class=\"button\" value=\"".$Translation['no']."\" onClick=\"window.location='departments_view.php?SelectedID=".urlencode($selected_id)."';\">", $RetMsg);
160 return $RetMsg;
161 }
162
163 sql("delete from `departments` where `id`='$selected_id'", $eo);
164
165 // hook: departments_after_delete
166 if(function_exists('departments_after_delete')){
167 $args=array();
168 departments_after_delete($selected_id, getMemberInfo(), $args);
169 }
170
171 // mm: delete ownership data
172 sql("delete from membership_userrecords where tableName='departments' and pkValue='$selected_id'", $eo);
173 }
174
175 function departments_update($selected_id){
176 global $Translation;
177
178 // mm: can member edit record?
179 $arrPerm=getTablePermissions('departments');
180 $ownerGroupID=sqlValue("select groupID from membership_userrecords where tableName='departments' and pkValue='".makeSafe($selected_id)."'");
181 $ownerMemberID=sqlValue("select lcase(memberID) from membership_userrecords where tableName='departments' and pkValue='".makeSafe($selected_id)."'");
182 if(($arrPerm[3]==1 && $ownerMemberID==getLoggedMemberID()) || ($arrPerm[3]==2 && $ownerGroupID==getLoggedGroupID()) || $arrPerm[3]==3){ // allow update?
183 // update allowed, so continue ...
184 }else{
185 return false;
186 }
187
188 $data['name'] = makeSafe($_REQUEST['name']);
189 if($data['name'] == empty_lookup_value){ $data['name'] = ''; }
190 if($data['name']==''){
191 echo StyleSheet() . "\n\n<div class=\"alert alert-danger\">{$Translation['error:']} 'Name': {$Translation['field not null']}<br><br>";
192 echo '<a href="" onclick="history.go(-1); return false;">'.$Translation['< back'].'</a></div>';
193 exit;
194 }
195 $data['school'] = makeSafe($_REQUEST['school']);
196 if($data['school'] == empty_lookup_value){ $data['school'] = ''; }
197 if($data['school']==''){
198 echo StyleSheet() . "\n\n<div class=\"alert alert-danger\">{$Translation['error:']} 'School': {$Translation['field not null']}<br><br>";
199 echo '<a href="" onclick="history.go(-1); return false;">'.$Translation['< back'].'</a></div>';
200 exit;
201 }
202 $data['selectedID']=makeSafe($selected_id);
203
204 // hook: departments_before_update
205 if(function_exists('departments_before_update')){
206 $args=array();
207 if(!departments_before_update($data, getMemberInfo(), $args)){ return false; }
208 }
209
210 $o=array('silentErrors' => true);
211 sql('update `departments` set `name`=' . (($data['name'] !== '' && $data['name'] !== NULL) ? "'{$data['name']}'" : 'NULL') . ', `school`=' . (($data['school'] !== '' && $data['school'] !== NULL) ? "'{$data['school']}'" : 'NULL') . " where `id`='".makeSafe($selected_id)."'", $o);
212 if($o['error']!=''){
213 echo $o['error'];
214 echo '<a href="departments_view.php?SelectedID='.urlencode($selected_id)."\">{$Translation['< back']}</a>";
215 exit;
216 }
217
218
219 // hook: departments_after_update
220 if(function_exists('departments_after_update')){
221 $res = sql("SELECT * FROM `departments` WHERE `id`='{$data['selectedID']}' LIMIT 1", $eo);
222 if($row = db_fetch_assoc($res)){
223 $data = array_map('makeSafe', $row);
224 }
225 $data['selectedID'] = $data['id'];
226 $args = array();
227 if(!departments_after_update($data, getMemberInfo(), $args)){ return; }
228 }
229
230 // mm: update ownership data
231 sql("update membership_userrecords set dateUpdated='".time()."' where tableName='departments' and pkValue='".makeSafe($selected_id)."'", $eo);
232
233 }
234
235 function departments_form($selected_id = '', $AllowUpdate = 1, $AllowInsert = 1, $AllowDelete = 1, $ShowCancel = 0, $TemplateDV = '', $TemplateDVP = ''){
236 // function to return an editable form for a table records
237 // and fill it with data of record whose ID is $selected_id. If $selected_id
238 // is empty, an empty form is shown, with only an 'Add New'
239 // button displayed.
240
241 global $Translation;
242
243 // mm: get table permissions
244 $arrPerm=getTablePermissions('departments');
245 if(!$arrPerm[1] && $selected_id==''){ return ''; }
246 $AllowInsert = ($arrPerm[1] ? true : false);
247 // print preview?
248 $dvprint = false;
249 if($selected_id && $_REQUEST['dvprint_x'] != ''){
250 $dvprint = true;
251 }
252
253 $filterer_school = thisOr(undo_magic_quotes($_REQUEST['filterer_school']), '');
254
255 // populate filterers, starting from children to grand-parents
256
257 // unique random identifier
258 $rnd1 = ($dvprint ? rand(1000000, 9999999) : '');
259 // combobox: school
260 $combo_school = new DataCombo;
261
262 if($selected_id){
263 // mm: check member permissions
264 if(!$arrPerm[2]){
265 return "";
266 }
267 // mm: who is the owner?
268 $ownerGroupID=sqlValue("select groupID from membership_userrecords where tableName='departments' and pkValue='".makeSafe($selected_id)."'");
269 $ownerMemberID=sqlValue("select lcase(memberID) from membership_userrecords where tableName='departments' and pkValue='".makeSafe($selected_id)."'");
270 if($arrPerm[2]==1 && getLoggedMemberID()!=$ownerMemberID){
271 return "";
272 }
273 if($arrPerm[2]==2 && getLoggedGroupID()!=$ownerGroupID){
274 return "";
275 }
276
277 // can edit?
278 if(($arrPerm[3]==1 && $ownerMemberID==getLoggedMemberID()) || ($arrPerm[3]==2 && $ownerGroupID==getLoggedGroupID()) || $arrPerm[3]==3){
279 $AllowUpdate=1;
280 }else{
281 $AllowUpdate=0;
282 }
283
284 $res = sql("select * from `departments` where `id`='".makeSafe($selected_id)."'", $eo);
285 if(!($row = db_fetch_array($res))){
286 return error_message($Translation['No records found'], 'departments_view.php', false);
287 }
288 $urow = $row; /* unsanitized data */
289 $hc = new CI_Input();
290 $row = $hc->xss_clean($row); /* sanitize data */
291 $combo_school->SelectedData = $row['school'];
292 }else{
293 $combo_school->SelectedData = $filterer_school;
294 }
295 $combo_school->HTML = '<span id="school-container' . $rnd1 . '"></span><input type="hidden" name="school" id="school' . $rnd1 . '" value="' . html_attr($combo_school->SelectedData) . '">';
296 $combo_school->MatchText = '<span id="school-container-readonly' . $rnd1 . '"></span><input type="hidden" name="school" id="school' . $rnd1 . '" value="' . html_attr($combo_school->SelectedData) . '">';
297
298 ob_start();
299 ?>
300
301 <script>
302 // initial lookup values
303 AppGini.current_school__RAND__ = { text: "", value: "<?php echo addslashes($selected_id ? $urow['school'] : $filterer_school); ?>"};
304
305 jQuery(function() {
306 setTimeout(function(){
307 if(typeof(school_reload__RAND__) == 'function') school_reload__RAND__();
308 }, 10); /* we need to slightly delay client-side execution of the above code to allow AppGini.ajaxCache to work */
309 });
310 function school_reload__RAND__(){
311 <?php if(($AllowUpdate || $AllowInsert) && !$dvprint){ ?>
312
313 $j("#school-container__RAND__").select2({
314 /* initial default value */
315 initSelection: function(e, c){
316 $j.ajax({
317 url: 'ajax_combo.php',
318 dataType: 'json',
319 data: { id: AppGini.current_school__RAND__.value, t: 'departments', f: 'school' },
320 success: function(resp){
321 c({
322 id: resp.results[0].id,
323 text: resp.results[0].text
324 });
325 $j('[name="school"]').val(resp.results[0].id);
326 $j('[id=school-container-readonly__RAND__]').html('<span id="school-match-text">' + resp.results[0].text + '</span>');
327 if(resp.results[0].id == '<?php echo empty_lookup_value; ?>'){ $j('.btn[id=schools_view_parent]').hide(); }else{ $j('.btn[id=schools_view_parent]').show(); }
328
329
330 if(typeof(school_update_autofills__RAND__) == 'function') school_update_autofills__RAND__();
331 }
332 });
333 },
334 width: '100%',
335 formatNoMatches: function(term){ /* */ return '<?php echo addslashes($Translation['No matches found!']); ?>'; },
336 minimumResultsForSearch: 10,
337 loadMorePadding: 200,
338 ajax: {
339 url: 'ajax_combo.php',
340 dataType: 'json',
341 cache: true,
342 data: function(term, page){ /* */ return { s: term, p: page, t: 'departments', f: 'school' }; },
343 results: function(resp, page){ /* */ return resp; }
344 },
345 escapeMarkup: function(str){ /* */ return str; }
346 }).on('change', function(e){
347 AppGini.current_school__RAND__.value = e.added.id;
348 AppGini.current_school__RAND__.text = e.added.text;
349 $j('[name="school"]').val(e.added.id);
350 if(e.added.id == '<?php echo empty_lookup_value; ?>'){ $j('.btn[id=schools_view_parent]').hide(); }else{ $j('.btn[id=schools_view_parent]').show(); }
351
352
353 if(typeof(school_update_autofills__RAND__) == 'function') school_update_autofills__RAND__();
354 });
355
356 if(!$j("#school-container__RAND__").length){
357 $j.ajax({
358 url: 'ajax_combo.php',
359 dataType: 'json',
360 data: { id: AppGini.current_school__RAND__.value, t: 'departments', f: 'school' },
361 success: function(resp){
362 $j('[name="school"]').val(resp.results[0].id);
363 $j('[id=school-container-readonly__RAND__]').html('<span id="school-match-text">' + resp.results[0].text + '</span>');
364 if(resp.results[0].id == '<?php echo empty_lookup_value; ?>'){ $j('.btn[id=schools_view_parent]').hide(); }else{ $j('.btn[id=schools_view_parent]').show(); }
365
366 if(typeof(school_update_autofills__RAND__) == 'function') school_update_autofills__RAND__();
367 }
368 });
369 }
370
371 <?php }else{ ?>
372
373 $j.ajax({
374 url: 'ajax_combo.php',
375 dataType: 'json',
376 data: { id: AppGini.current_school__RAND__.value, t: 'departments', f: 'school' },
377 success: function(resp){
378 $j('[id=school-container__RAND__], [id=school-container-readonly__RAND__]').html('<span id="school-match-text">' + resp.results[0].text + '</span>');
379 if(resp.results[0].id == '<?php echo empty_lookup_value; ?>'){ $j('.btn[id=schools_view_parent]').hide(); }else{ $j('.btn[id=schools_view_parent]').show(); }
380
381 if(typeof(school_update_autofills__RAND__) == 'function') school_update_autofills__RAND__();
382 }
383 });
384 <?php } ?>
385
386 }
387 </script>
388 <?php
389
390 $lookups = str_replace('__RAND__', $rnd1, ob_get_contents());
391 ob_end_clean();
392
393
394 // code for template based detail view forms
395
396 // open the detail view template
397 if($dvprint){
398 $template_file = is_file("./{$TemplateDVP}") ? "./{$TemplateDVP}" : './templates/departments_templateDVP.html';
399 $templateCode = @file_get_contents($template_file);
400 }else{
401 $template_file = is_file("./{$TemplateDV}") ? "./{$TemplateDV}" : './templates/departments_templateDV.html';
402 $templateCode = @file_get_contents($template_file);
403 }
404
405 // process form title
406 $templateCode = str_replace('<%%DETAIL_VIEW_TITLE%%>', 'Thông tin môn học', $templateCode);
407 $templateCode = str_replace('<%%RND1%%>', $rnd1, $templateCode);
408 $templateCode = str_replace('<%%EMBEDDED%%>', ($_REQUEST['Embedded'] ? 'Embedded=1' : ''), $templateCode);
409 // process buttons
410 if($AllowInsert){
411 if(!$selected_id) $templateCode = str_replace('<%%INSERT_BUTTON%%>', '<button type="submit" class="btn btn-success" id="insert" name="insert_x" value="1" onclick="return departments_validateData();"><i class="glyphicon glyphicon-plus-sign"></i> ' . $Translation['Save New'] . '</button>', $templateCode);
412 $templateCode = str_replace('<%%INSERT_BUTTON%%>', '<button type="submit" class="btn btn-default" id="insert" name="insert_x" value="1" onclick="return departments_validateData();"><i class="glyphicon glyphicon-plus-sign"></i> ' . $Translation['Save As Copy'] . '</button>', $templateCode);
413 }else{
414 $templateCode = str_replace('<%%INSERT_BUTTON%%>', '', $templateCode);
415 }
416
417 // 'Back' button action
418 if($_REQUEST['Embedded']){
419 $backAction = 'AppGini.closeParentModal(); return false;';
420 }else{
421 $backAction = '$j(\'form\').eq(0).attr(\'novalidate\', \'novalidate\'); document.myform.reset(); return true;';
422 }
423
424 if($selected_id){
425 if(!$_REQUEST['Embedded']) $templateCode = str_replace('<%%DVPRINT_BUTTON%%>', '<button type="submit" class="btn btn-default" id="dvprint" name="dvprint_x" value="1" onclick="$$(\'form\')[0].writeAttribute(\'novalidate\', \'novalidate\'); document.myform.reset(); return true;" title="' . html_attr($Translation['Print Preview']) . '"><i class="glyphicon glyphicon-print"></i> ' . $Translation['Print Preview'] . '</button>', $templateCode);
426 if($AllowUpdate){
427 $templateCode = str_replace('<%%UPDATE_BUTTON%%>', '<button type="submit" class="btn btn-success btn-lg" id="update" name="update_x" value="1" onclick="return departments_validateData();" title="' . html_attr($Translation['Save Changes']) . '"><i class="glyphicon glyphicon-ok"></i> ' . $Translation['Save Changes'] . '</button>', $templateCode);
428 }else{
429 $templateCode = str_replace('<%%UPDATE_BUTTON%%>', '', $templateCode);
430 }
431 if(($arrPerm[4]==1 && $ownerMemberID==getLoggedMemberID()) || ($arrPerm[4]==2 && $ownerGroupID==getLoggedGroupID()) || $arrPerm[4]==3){ // allow delete?
432 $templateCode = str_replace('<%%DELETE_BUTTON%%>', '<button type="submit" class="btn btn-danger" id="delete" name="delete_x" value="1" onclick="return confirm(\'' . $Translation['are you sure?'] . '\');" title="' . html_attr($Translation['Delete']) . '"><i class="glyphicon glyphicon-trash"></i> ' . $Translation['Delete'] . '</button>', $templateCode);
433 }else{
434 $templateCode = str_replace('<%%DELETE_BUTTON%%>', '', $templateCode);
435 }
436 $templateCode = str_replace('<%%DESELECT_BUTTON%%>', '<button type="submit" class="btn btn-default" id="deselect" name="deselect_x" value="1" onclick="' . $backAction . '" title="' . html_attr($Translation['Back']) . '"><i class="glyphicon glyphicon-chevron-left"></i> ' . $Translation['Back'] . '</button>', $templateCode);
437 }else{
438 $templateCode = str_replace('<%%UPDATE_BUTTON%%>', '', $templateCode);
439 $templateCode = str_replace('<%%DELETE_BUTTON%%>', '', $templateCode);
440 $templateCode = str_replace('<%%DESELECT_BUTTON%%>', ($ShowCancel ? '<button type="submit" class="btn btn-default" id="deselect" name="deselect_x" value="1" onclick="' . $backAction . '" title="' . html_attr($Translation['Back']) . '"><i class="glyphicon glyphicon-chevron-left"></i> ' . $Translation['Back'] . '</button>' : ''), $templateCode);
441 }
442
443 // set records to read only if user can't insert new records and can't edit current record
444 if(($selected_id && !$AllowUpdate && !$AllowInsert) || (!$selected_id && !$AllowInsert)){
445 $jsReadOnly .= "\tjQuery('#name').replaceWith('<div class=\"form-control-static\" id=\"name\">' + (jQuery('#name').val() || '') + '</div>');\n";
446 $jsReadOnly .= "\tjQuery('#school').prop('disabled', true).css({ color: '#555', backgroundColor: '#fff' });\n";
447 $jsReadOnly .= "\tjQuery('#school_caption').prop('disabled', true).css({ color: '#555', backgroundColor: 'white' });\n";
448 $jsReadOnly .= "\tjQuery('.select2-container').hide();\n";
449
450 $noUploads = true;
451 }elseif($AllowInsert){
452 $jsEditable .= "\tjQuery('form').eq(0).data('already_changed', true);"; // temporarily disable form change handler
453 $jsEditable .= "\tjQuery('form').eq(0).data('already_changed', false);"; // re-enable form change handler
454 }
455
456 // process combos
457 $templateCode = str_replace('<%%COMBO(school)%%>', $combo_school->HTML, $templateCode);
458 $templateCode = str_replace('<%%COMBOTEXT(school)%%>', $combo_school->MatchText, $templateCode);
459 $templateCode = str_replace('<%%URLCOMBOTEXT(school)%%>', urlencode($combo_school->MatchText), $templateCode);
460
461 /* lookup fields array: 'lookup field name' => array('parent table name', 'lookup field caption') */
462 $lookup_fields = array( 'school' => array('schools', 'School'));
463 foreach($lookup_fields as $luf => $ptfc){
464 $pt_perm = getTablePermissions($ptfc[0]);
465
466 // process foreign key links
467 if($pt_perm['view'] || $pt_perm['edit']){
468 $templateCode = str_replace("<%%PLINK({$luf})%%>", '<button type="button" class="btn btn-default view_parent hspacer-md" id="' . $ptfc[0] . '_view_parent" title="' . html_attr($Translation['View'] . ' ' . $ptfc[1]) . '"><i class="glyphicon glyphicon-eye-open"></i></button>', $templateCode);
469 }
470
471 // if user has insert permission to parent table of a lookup field, put an add new button
472 if($pt_perm['insert'] && !$_REQUEST['Embedded']){
473 $templateCode = str_replace("<%%ADDNEW({$ptfc[0]})%%>", '<button type="button" class="btn btn-success add_new_parent hspacer-md" id="' . $ptfc[0] . '_add_new" title="' . html_attr($Translation['Add New'] . ' ' . $ptfc[1]) . '"><i class="glyphicon glyphicon-plus-sign"></i></button>', $templateCode);
474 }
475 }
476
477 // process images
478 $templateCode = str_replace('<%%UPLOADFILE(id)%%>', '', $templateCode);
479 $templateCode = str_replace('<%%UPLOADFILE(name)%%>', '', $templateCode);
480 $templateCode = str_replace('<%%UPLOADFILE(school)%%>', '', $templateCode);
481
482 // process values
483 if($selected_id){
484 if( $dvprint) $templateCode = str_replace('<%%VALUE(id)%%>', safe_html($urow['id']), $templateCode);
485 if(!$dvprint) $templateCode = str_replace('<%%VALUE(id)%%>', html_attr($row['id']), $templateCode);
486 $templateCode = str_replace('<%%URLVALUE(id)%%>', urlencode($urow['id']), $templateCode);
487 if( $dvprint) $templateCode = str_replace('<%%VALUE(name)%%>', safe_html($urow['name']), $templateCode);
488 if(!$dvprint) $templateCode = str_replace('<%%VALUE(name)%%>', html_attr($row['name']), $templateCode);
489 $templateCode = str_replace('<%%URLVALUE(name)%%>', urlencode($urow['name']), $templateCode);
490 if( $dvprint) $templateCode = str_replace('<%%VALUE(school)%%>', safe_html($urow['school']), $templateCode);
491 if(!$dvprint) $templateCode = str_replace('<%%VALUE(school)%%>', html_attr($row['school']), $templateCode);
492 $templateCode = str_replace('<%%URLVALUE(school)%%>', urlencode($urow['school']), $templateCode);
493 }else{
494 $templateCode = str_replace('<%%VALUE(id)%%>', '', $templateCode);
495 $templateCode = str_replace('<%%URLVALUE(id)%%>', urlencode(''), $templateCode);
496 $templateCode = str_replace('<%%VALUE(name)%%>', '', $templateCode);
497 $templateCode = str_replace('<%%URLVALUE(name)%%>', urlencode(''), $templateCode);
498 $templateCode = str_replace('<%%VALUE(school)%%>', '', $templateCode);
499 $templateCode = str_replace('<%%URLVALUE(school)%%>', urlencode(''), $templateCode);
500 }
501
502 // process translations
503 foreach($Translation as $symbol=>$trans){
504 $templateCode = str_replace("<%%TRANSLATION($symbol)%%>", $trans, $templateCode);
505 }
506
507 // clear scrap
508 $templateCode = str_replace('<%%', '<!-- ', $templateCode);
509 $templateCode = str_replace('%%>', ' -->', $templateCode);
510
511 // hide links to inaccessible tables
512 if($_REQUEST['dvprint_x'] == ''){
513 $templateCode .= "\n\n<script>\$j(function(){\n";
514 $arrTables = getTableList();
515 foreach($arrTables as $name => $caption){
516 $templateCode .= "\t\$j('#{$name}_link').removeClass('hidden');\n";
517 $templateCode .= "\t\$j('#xs_{$name}_link').removeClass('hidden');\n";
518 }
519
520 $templateCode .= $jsReadOnly;
521 $templateCode .= $jsEditable;
522
523 if(!$selected_id){
524 }
525
526 $templateCode.="\n});</script>\n";
527 }
528
529 // ajaxed auto-fill fields
530 $templateCode .= '<script>';
531 $templateCode .= '$j(function() {';
532
533
534 $templateCode.="});";
535 $templateCode.="</script>";
536 $templateCode .= $lookups;
537
538 // handle enforced parent values for read-only lookup fields
539
540 // don't include blank images in lightbox gallery
541 $templateCode = preg_replace('/blank.gif" data-lightbox=".*?"/', 'blank.gif"', $templateCode);
542
543 // don't display empty email links
544 $templateCode=preg_replace('/<a .*?href="mailto:".*?<\/a>/', '', $templateCode);
545
546 /* default field values */
547 $rdata = $jdata = get_defaults('departments');
548 if($selected_id){
549 $jdata = get_joined_record('departments', $selected_id);
550 if($jdata === false) $jdata = get_defaults('departments');
551 $rdata = $row;
552 }
553 $templateCode .= loadView('departments-ajax-cache', array('rdata' => $rdata, 'jdata' => $jdata));
554
555 // hook: departments_dv
556 if(function_exists('departments_dv')){
557 $args=array();
558 departments_dv(($selected_id ? $selected_id : FALSE), getMemberInfo(), $templateCode, $args);
559 }
560
561 return $templateCode;
562 }
563 ?>
2
3 // Data functions (insert, update, delete, form) for table departments
4
5 // This script and data application were generated by AppGini 5.72
6 // Download AppGini for free from https://bigprof.com/appgini/download/
7
8 function departments_insert(){
9 global $Translation;
10
11 // mm: can member insert record?
12 $arrPerm=getTablePermissions('departments');
13 if(!$arrPerm[1]){
14 return false;
15 }
16
17 $data['name'] = makeSafe($_REQUEST['name']);
18 if($data['name'] == empty_lookup_value){ $data['name'] = ''; }
19 $data['school'] = makeSafe($_REQUEST['school']);
20 if($data['school'] == empty_lookup_value){ $data['school'] = ''; }
21 if($data['name']== ''){
22 echo StyleSheet() . "\n\n<div class=\"alert alert-danger\">" . $Translation['error:'] . " 'Name': " . $Translation['field not null'] . '<br><br>';
23 echo '<a href="" onclick="history.go(-1); return false;">'.$Translation['< back'].'</a></div>';
24 exit;
25 }
26 if($data['school']== ''){
27 echo StyleSheet() . "\n\n<div class=\"alert alert-danger\">" . $Translation['error:'] . " 'School': " . $Translation['field not null'] . '<br><br>';
28 echo '<a href="" onclick="history.go(-1); return false;">'.$Translation['< back'].'</a></div>';
29 exit;
30 }
31
32 // hook: departments_before_insert
33 if(function_exists('departments_before_insert')){
34 $args=array();
35 if(!departments_before_insert($data, getMemberInfo(), $args)){ return false; }
36 }
37
38 $o = array('silentErrors' => true);
39 sql('insert into `departments` set `name`=' . (($data['name'] !== '' && $data['name'] !== NULL) ? "'{$data['name']}'" : 'NULL') . ', `school`=' . (($data['school'] !== '' && $data['school'] !== NULL) ? "'{$data['school']}'" : 'NULL'), $o);
40 if($o['error']!=''){
41 echo $o['error'];
42 echo "<a href=\"departments_view.php?addNew_x=1\">{$Translation['< back']}</a>";
43 exit;
44 }
45
46 $recID = db_insert_id(db_link());
47
48 // hook: departments_after_insert
49 if(function_exists('departments_after_insert')){
50 $res = sql("select * from `departments` where `id`='" . makeSafe($recID, false) . "' limit 1", $eo);
51 if($row = db_fetch_assoc($res)){
52 $data = array_map('makeSafe', $row);
53 }
54 $data['selectedID'] = makeSafe($recID, false);
55 $args=array();
56 if(!departments_after_insert($data, getMemberInfo(), $args)){ return $recID; }
57 }
58
59 // mm: save ownership data
60 set_record_owner('departments', $recID, getLoggedMemberID());
61
62 return $recID;
63 }
64
65 function departments_delete($selected_id, $AllowDeleteOfParents=false, $skipChecks=false){
66 // insure referential integrity ...
67 global $Translation;
68 $selected_id=makeSafe($selected_id);
69
70 // mm: can member delete record?
71 $arrPerm=getTablePermissions('departments');
72 $ownerGroupID=sqlValue("select groupID from membership_userrecords where tableName='departments' and pkValue='$selected_id'");
73 $ownerMemberID=sqlValue("select lcase(memberID) from membership_userrecords where tableName='departments' and pkValue='$selected_id'");
74 if(($arrPerm[4]==1 && $ownerMemberID==getLoggedMemberID()) || ($arrPerm[4]==2 && $ownerGroupID==getLoggedGroupID()) || $arrPerm[4]==3){ // allow delete?
75 // delete allowed, so continue ...
76 }else{
77 return $Translation['You don\'t have enough permissions to delete this record'];
78 }
79
80 // hook: departments_before_delete
81 if(function_exists('departments_before_delete')){
82 $args=array();
83 if(!departments_before_delete($selected_id, $skipChecks, getMemberInfo(), $args))
84 return $Translation['Couldn\'t delete this record'];
85 }
86
87 // child table: class_time_table
88 $res = sql("select `id` from `departments` where `id`='$selected_id'", $eo);
89 $id = db_fetch_row($res);
90 $rires = sql("select count(1) from `class_time_table` where `department`='".addslashes($id[0])."'", $eo);
91 $rirow = db_fetch_row($rires);
92 if($rirow[0] && !$AllowDeleteOfParents && !$skipChecks){
93 $RetMsg = $Translation["couldn't delete"];
94 $RetMsg = str_replace("<RelatedRecords>", $rirow[0], $RetMsg);
95 $RetMsg = str_replace("<TableName>", "class_time_table", $RetMsg);
96 return $RetMsg;
97 }elseif($rirow[0] && $AllowDeleteOfParents && !$skipChecks){
98 $RetMsg = $Translation["confirm delete"];
99 $RetMsg = str_replace("<RelatedRecords>", $rirow[0], $RetMsg);
100 $RetMsg = str_replace("<TableName>", "class_time_table", $RetMsg);
101 $RetMsg = str_replace("<Delete>", "<input type=\"button\" class=\"button\" value=\"".$Translation['yes']."\" onClick=\"window.location='departments_view.php?SelectedID=".urlencode($selected_id)."&delete_x=1&confirmed=1';\">", $RetMsg);
102 $RetMsg = str_replace("<Cancel>", "<input type=\"button\" class=\"button\" value=\"".$Translation['no']."\" onClick=\"window.location='departments_view.php?SelectedID=".urlencode($selected_id)."';\">", $RetMsg);
103 return $RetMsg;
104 }
105
106 // child table: exam_time_table
107 $res = sql("select `id` from `departments` where `id`='$selected_id'", $eo);
108 $id = db_fetch_row($res);
109 $rires = sql("select count(1) from `exam_time_table` where `department`='".addslashes($id[0])."'", $eo);
110 $rirow = db_fetch_row($rires);
111 if($rirow[0] && !$AllowDeleteOfParents && !$skipChecks){
112 $RetMsg = $Translation["couldn't delete"];
113 $RetMsg = str_replace("<RelatedRecords>", $rirow[0], $RetMsg);
114 $RetMsg = str_replace("<TableName>", "exam_time_table", $RetMsg);
115 return $RetMsg;
116 }elseif($rirow[0] && $AllowDeleteOfParents && !$skipChecks){
117 $RetMsg = $Translation["confirm delete"];
118 $RetMsg = str_replace("<RelatedRecords>", $rirow[0], $RetMsg);
119 $RetMsg = str_replace("<TableName>", "exam_time_table", $RetMsg);
120 $RetMsg = str_replace("<Delete>", "<input type=\"button\" class=\"button\" value=\"".$Translation['yes']."\" onClick=\"window.location='departments_view.php?SelectedID=".urlencode($selected_id)."&delete_x=1&confirmed=1';\">", $RetMsg);
121 $RetMsg = str_replace("<Cancel>", "<input type=\"button\" class=\"button\" value=\"".$Translation['no']."\" onClick=\"window.location='departments_view.php?SelectedID=".urlencode($selected_id)."';\">", $RetMsg);
122 return $RetMsg;
123 }
124
125 // child table: student_details
126 $res = sql("select `id` from `departments` where `id`='$selected_id'", $eo);
127 $id = db_fetch_row($res);
128 $rires = sql("select count(1) from `student_details` where `department`='".addslashes($id[0])."'", $eo);
129 $rirow = db_fetch_row($rires);
130 if($rirow[0] && !$AllowDeleteOfParents && !$skipChecks){
131 $RetMsg = $Translation["couldn't delete"];
132 $RetMsg = str_replace("<RelatedRecords>", $rirow[0], $RetMsg);
133 $RetMsg = str_replace("<TableName>", "student_details", $RetMsg);
134 return $RetMsg;
135 }elseif($rirow[0] && $AllowDeleteOfParents && !$skipChecks){
136 $RetMsg = $Translation["confirm delete"];
137 $RetMsg = str_replace("<RelatedRecords>", $rirow[0], $RetMsg);
138 $RetMsg = str_replace("<TableName>", "student_details", $RetMsg);
139 $RetMsg = str_replace("<Delete>", "<input type=\"button\" class=\"button\" value=\"".$Translation['yes']."\" onClick=\"window.location='departments_view.php?SelectedID=".urlencode($selected_id)."&delete_x=1&confirmed=1';\">", $RetMsg);
140 $RetMsg = str_replace("<Cancel>", "<input type=\"button\" class=\"button\" value=\"".$Translation['no']."\" onClick=\"window.location='departments_view.php?SelectedID=".urlencode($selected_id)."';\">", $RetMsg);
141 return $RetMsg;
142 }
143
144 // child table: notices
145 $res = sql("select `id` from `departments` where `id`='$selected_id'", $eo);
146 $id = db_fetch_row($res);
147 $rires = sql("select count(1) from `notices` where `department`='".addslashes($id[0])."'", $eo);
148 $rirow = db_fetch_row($rires);
149 if($rirow[0] && !$AllowDeleteOfParents && !$skipChecks){
150 $RetMsg = $Translation["couldn't delete"];
151 $RetMsg = str_replace("<RelatedRecords>", $rirow[0], $RetMsg);
152 $RetMsg = str_replace("<TableName>", "notices", $RetMsg);
153 return $RetMsg;
154 }elseif($rirow[0] && $AllowDeleteOfParents && !$skipChecks){
155 $RetMsg = $Translation["confirm delete"];
156 $RetMsg = str_replace("<RelatedRecords>", $rirow[0], $RetMsg);
157 $RetMsg = str_replace("<TableName>", "notices", $RetMsg);
158 $RetMsg = str_replace("<Delete>", "<input type=\"button\" class=\"button\" value=\"".$Translation['yes']."\" onClick=\"window.location='departments_view.php?SelectedID=".urlencode($selected_id)."&delete_x=1&confirmed=1';\">", $RetMsg);
159 $RetMsg = str_replace("<Cancel>", "<input type=\"button\" class=\"button\" value=\"".$Translation['no']."\" onClick=\"window.location='departments_view.php?SelectedID=".urlencode($selected_id)."';\">", $RetMsg);
160 return $RetMsg;
161 }
162
163 sql("delete from `departments` where `id`='$selected_id'", $eo);
164
165 // hook: departments_after_delete
166 if(function_exists('departments_after_delete')){
167 $args=array();
168 departments_after_delete($selected_id, getMemberInfo(), $args);
169 }
170
171 // mm: delete ownership data
172 sql("delete from membership_userrecords where tableName='departments' and pkValue='$selected_id'", $eo);
173 }
174
175 function departments_update($selected_id){
176 global $Translation;
177
178 // mm: can member edit record?
179 $arrPerm=getTablePermissions('departments');
180 $ownerGroupID=sqlValue("select groupID from membership_userrecords where tableName='departments' and pkValue='".makeSafe($selected_id)."'");
181 $ownerMemberID=sqlValue("select lcase(memberID) from membership_userrecords where tableName='departments' and pkValue='".makeSafe($selected_id)."'");
182 if(($arrPerm[3]==1 && $ownerMemberID==getLoggedMemberID()) || ($arrPerm[3]==2 && $ownerGroupID==getLoggedGroupID()) || $arrPerm[3]==3){ // allow update?
183 // update allowed, so continue ...
184 }else{
185 return false;
186 }
187
188 $data['name'] = makeSafe($_REQUEST['name']);
189 if($data['name'] == empty_lookup_value){ $data['name'] = ''; }
190 if($data['name']==''){
191 echo StyleSheet() . "\n\n<div class=\"alert alert-danger\">{$Translation['error:']} 'Name': {$Translation['field not null']}<br><br>";
192 echo '<a href="" onclick="history.go(-1); return false;">'.$Translation['< back'].'</a></div>';
193 exit;
194 }
195 $data['school'] = makeSafe($_REQUEST['school']);
196 if($data['school'] == empty_lookup_value){ $data['school'] = ''; }
197 if($data['school']==''){
198 echo StyleSheet() . "\n\n<div class=\"alert alert-danger\">{$Translation['error:']} 'School': {$Translation['field not null']}<br><br>";
199 echo '<a href="" onclick="history.go(-1); return false;">'.$Translation['< back'].'</a></div>';
200 exit;
201 }
202 $data['selectedID']=makeSafe($selected_id);
203
204 // hook: departments_before_update
205 if(function_exists('departments_before_update')){
206 $args=array();
207 if(!departments_before_update($data, getMemberInfo(), $args)){ return false; }
208 }
209
210 $o=array('silentErrors' => true);
211 sql('update `departments` set `name`=' . (($data['name'] !== '' && $data['name'] !== NULL) ? "'{$data['name']}'" : 'NULL') . ', `school`=' . (($data['school'] !== '' && $data['school'] !== NULL) ? "'{$data['school']}'" : 'NULL') . " where `id`='".makeSafe($selected_id)."'", $o);
212 if($o['error']!=''){
213 echo $o['error'];
214 echo '<a href="departments_view.php?SelectedID='.urlencode($selected_id)."\">{$Translation['< back']}</a>";
215 exit;
216 }
217
218
219 // hook: departments_after_update
220 if(function_exists('departments_after_update')){
221 $res = sql("SELECT * FROM `departments` WHERE `id`='{$data['selectedID']}' LIMIT 1", $eo);
222 if($row = db_fetch_assoc($res)){
223 $data = array_map('makeSafe', $row);
224 }
225 $data['selectedID'] = $data['id'];
226 $args = array();
227 if(!departments_after_update($data, getMemberInfo(), $args)){ return; }
228 }
229
230 // mm: update ownership data
231 sql("update membership_userrecords set dateUpdated='".time()."' where tableName='departments' and pkValue='".makeSafe($selected_id)."'", $eo);
232
233 }
234
235 function departments_form($selected_id = '', $AllowUpdate = 1, $AllowInsert = 1, $AllowDelete = 1, $ShowCancel = 0, $TemplateDV = '', $TemplateDVP = ''){
236 // function to return an editable form for a table records
237 // and fill it with data of record whose ID is $selected_id. If $selected_id
238 // is empty, an empty form is shown, with only an 'Add New'
239 // button displayed.
240
241 global $Translation;
242
243 // mm: get table permissions
244 $arrPerm=getTablePermissions('departments');
245 if(!$arrPerm[1] && $selected_id==''){ return ''; }
246 $AllowInsert = ($arrPerm[1] ? true : false);
247 // print preview?
248 $dvprint = false;
249 if($selected_id && $_REQUEST['dvprint_x'] != ''){
250 $dvprint = true;
251 }
252
253 $filterer_school = thisOr(undo_magic_quotes($_REQUEST['filterer_school']), '');
254
255 // populate filterers, starting from children to grand-parents
256
257 // unique random identifier
258 $rnd1 = ($dvprint ? rand(1000000, 9999999) : '');
259 // combobox: school
260 $combo_school = new DataCombo;
261
262 if($selected_id){
263 // mm: check member permissions
264 if(!$arrPerm[2]){
265 return "";
266 }
267 // mm: who is the owner?
268 $ownerGroupID=sqlValue("select groupID from membership_userrecords where tableName='departments' and pkValue='".makeSafe($selected_id)."'");
269 $ownerMemberID=sqlValue("select lcase(memberID) from membership_userrecords where tableName='departments' and pkValue='".makeSafe($selected_id)."'");
270 if($arrPerm[2]==1 && getLoggedMemberID()!=$ownerMemberID){
271 return "";
272 }
273 if($arrPerm[2]==2 && getLoggedGroupID()!=$ownerGroupID){
274 return "";
275 }
276
277 // can edit?
278 if(($arrPerm[3]==1 && $ownerMemberID==getLoggedMemberID()) || ($arrPerm[3]==2 && $ownerGroupID==getLoggedGroupID()) || $arrPerm[3]==3){
279 $AllowUpdate=1;
280 }else{
281 $AllowUpdate=0;
282 }
283
284 $res = sql("select * from `departments` where `id`='".makeSafe($selected_id)."'", $eo);
285 if(!($row = db_fetch_array($res))){
286 return error_message($Translation['No records found'], 'departments_view.php', false);
287 }
288 $urow = $row; /* unsanitized data */
289 $hc = new CI_Input();
290 $row = $hc->xss_clean($row); /* sanitize data */
291 $combo_school->SelectedData = $row['school'];
292 }else{
293 $combo_school->SelectedData = $filterer_school;
294 }
295 $combo_school->HTML = '<span id="school-container' . $rnd1 . '"></span><input type="hidden" name="school" id="school' . $rnd1 . '" value="' . html_attr($combo_school->SelectedData) . '">';
296 $combo_school->MatchText = '<span id="school-container-readonly' . $rnd1 . '"></span><input type="hidden" name="school" id="school' . $rnd1 . '" value="' . html_attr($combo_school->SelectedData) . '">';
297
298 ob_start();
299 ?>
300
301 <script>
302 // initial lookup values
303 AppGini.current_school__RAND__ = { text: "", value: "<?php echo addslashes($selected_id ? $urow['school'] : $filterer_school); ?>"};
304
305 jQuery(function() {
306 setTimeout(function(){
307 if(typeof(school_reload__RAND__) == 'function') school_reload__RAND__();
308 }, 10); /* we need to slightly delay client-side execution of the above code to allow AppGini.ajaxCache to work */
309 });
310 function school_reload__RAND__(){
311 <?php if(($AllowUpdate || $AllowInsert) && !$dvprint){ ?>
312
313 $j("#school-container__RAND__").select2({
314 /* initial default value */
315 initSelection: function(e, c){
316 $j.ajax({
317 url: 'ajax_combo.php',
318 dataType: 'json',
319 data: { id: AppGini.current_school__RAND__.value, t: 'departments', f: 'school' },
320 success: function(resp){
321 c({
322 id: resp.results[0].id,
323 text: resp.results[0].text
324 });
325 $j('[name="school"]').val(resp.results[0].id);
326 $j('[id=school-container-readonly__RAND__]').html('<span id="school-match-text">' + resp.results[0].text + '</span>');
327 if(resp.results[0].id == '<?php echo empty_lookup_value; ?>'){ $j('.btn[id=schools_view_parent]').hide(); }else{ $j('.btn[id=schools_view_parent]').show(); }
328
329
330 if(typeof(school_update_autofills__RAND__) == 'function') school_update_autofills__RAND__();
331 }
332 });
333 },
334 width: '100%',
335 formatNoMatches: function(term){ /* */ return '<?php echo addslashes($Translation['No matches found!']); ?>'; },
336 minimumResultsForSearch: 10,
337 loadMorePadding: 200,
338 ajax: {
339 url: 'ajax_combo.php',
340 dataType: 'json',
341 cache: true,
342 data: function(term, page){ /* */ return { s: term, p: page, t: 'departments', f: 'school' }; },
343 results: function(resp, page){ /* */ return resp; }
344 },
345 escapeMarkup: function(str){ /* */ return str; }
346 }).on('change', function(e){
347 AppGini.current_school__RAND__.value = e.added.id;
348 AppGini.current_school__RAND__.text = e.added.text;
349 $j('[name="school"]').val(e.added.id);
350 if(e.added.id == '<?php echo empty_lookup_value; ?>'){ $j('.btn[id=schools_view_parent]').hide(); }else{ $j('.btn[id=schools_view_parent]').show(); }
351
352
353 if(typeof(school_update_autofills__RAND__) == 'function') school_update_autofills__RAND__();
354 });
355
356 if(!$j("#school-container__RAND__").length){
357 $j.ajax({
358 url: 'ajax_combo.php',
359 dataType: 'json',
360 data: { id: AppGini.current_school__RAND__.value, t: 'departments', f: 'school' },
361 success: function(resp){
362 $j('[name="school"]').val(resp.results[0].id);
363 $j('[id=school-container-readonly__RAND__]').html('<span id="school-match-text">' + resp.results[0].text + '</span>');
364 if(resp.results[0].id == '<?php echo empty_lookup_value; ?>'){ $j('.btn[id=schools_view_parent]').hide(); }else{ $j('.btn[id=schools_view_parent]').show(); }
365
366 if(typeof(school_update_autofills__RAND__) == 'function') school_update_autofills__RAND__();
367 }
368 });
369 }
370
371 <?php }else{ ?>
372
373 $j.ajax({
374 url: 'ajax_combo.php',
375 dataType: 'json',
376 data: { id: AppGini.current_school__RAND__.value, t: 'departments', f: 'school' },
377 success: function(resp){
378 $j('[id=school-container__RAND__], [id=school-container-readonly__RAND__]').html('<span id="school-match-text">' + resp.results[0].text + '</span>');
379 if(resp.results[0].id == '<?php echo empty_lookup_value; ?>'){ $j('.btn[id=schools_view_parent]').hide(); }else{ $j('.btn[id=schools_view_parent]').show(); }
380
381 if(typeof(school_update_autofills__RAND__) == 'function') school_update_autofills__RAND__();
382 }
383 });
384 <?php } ?>
385
386 }
387 </script>
388 <?php
389
390 $lookups = str_replace('__RAND__', $rnd1, ob_get_contents());
391 ob_end_clean();
392
393
394 // code for template based detail view forms
395
396 // open the detail view template
397 if($dvprint){
398 $template_file = is_file("./{$TemplateDVP}") ? "./{$TemplateDVP}" : './templates/departments_templateDVP.html';
399 $templateCode = @file_get_contents($template_file);
400 }else{
401 $template_file = is_file("./{$TemplateDV}") ? "./{$TemplateDV}" : './templates/departments_templateDV.html';
402 $templateCode = @file_get_contents($template_file);
403 }
404
405 // process form title
406 $templateCode = str_replace('<%%DETAIL_VIEW_TITLE%%>', 'Thông tin môn học', $templateCode);
407 $templateCode = str_replace('<%%RND1%%>', $rnd1, $templateCode);
408 $templateCode = str_replace('<%%EMBEDDED%%>', ($_REQUEST['Embedded'] ? 'Embedded=1' : ''), $templateCode);
409 // process buttons
410 if($AllowInsert){
411 if(!$selected_id) $templateCode = str_replace('<%%INSERT_BUTTON%%>', '<button type="submit" class="btn btn-success" id="insert" name="insert_x" value="1" onclick="return departments_validateData();"><i class="glyphicon glyphicon-plus-sign"></i> ' . $Translation['Save New'] . '</button>', $templateCode);
412 $templateCode = str_replace('<%%INSERT_BUTTON%%>', '<button type="submit" class="btn btn-default" id="insert" name="insert_x" value="1" onclick="return departments_validateData();"><i class="glyphicon glyphicon-plus-sign"></i> ' . $Translation['Save As Copy'] . '</button>', $templateCode);
413 }else{
414 $templateCode = str_replace('<%%INSERT_BUTTON%%>', '', $templateCode);
415 }
416
417 // 'Back' button action
418 if($_REQUEST['Embedded']){
419 $backAction = 'AppGini.closeParentModal(); return false;';
420 }else{
421 $backAction = '$j(\'form\').eq(0).attr(\'novalidate\', \'novalidate\'); document.myform.reset(); return true;';
422 }
423
424 if($selected_id){
425 if(!$_REQUEST['Embedded']) $templateCode = str_replace('<%%DVPRINT_BUTTON%%>', '<button type="submit" class="btn btn-default" id="dvprint" name="dvprint_x" value="1" onclick="$$(\'form\')[0].writeAttribute(\'novalidate\', \'novalidate\'); document.myform.reset(); return true;" title="' . html_attr($Translation['Print Preview']) . '"><i class="glyphicon glyphicon-print"></i> ' . $Translation['Print Preview'] . '</button>', $templateCode);
426 if($AllowUpdate){
427 $templateCode = str_replace('<%%UPDATE_BUTTON%%>', '<button type="submit" class="btn btn-success btn-lg" id="update" name="update_x" value="1" onclick="return departments_validateData();" title="' . html_attr($Translation['Save Changes']) . '"><i class="glyphicon glyphicon-ok"></i> ' . $Translation['Save Changes'] . '</button>', $templateCode);
428 }else{
429 $templateCode = str_replace('<%%UPDATE_BUTTON%%>', '', $templateCode);
430 }
431 if(($arrPerm[4]==1 && $ownerMemberID==getLoggedMemberID()) || ($arrPerm[4]==2 && $ownerGroupID==getLoggedGroupID()) || $arrPerm[4]==3){ // allow delete?
432 $templateCode = str_replace('<%%DELETE_BUTTON%%>', '<button type="submit" class="btn btn-danger" id="delete" name="delete_x" value="1" onclick="return confirm(\'' . $Translation['are you sure?'] . '\');" title="' . html_attr($Translation['Delete']) . '"><i class="glyphicon glyphicon-trash"></i> ' . $Translation['Delete'] . '</button>', $templateCode);
433 }else{
434 $templateCode = str_replace('<%%DELETE_BUTTON%%>', '', $templateCode);
435 }
436 $templateCode = str_replace('<%%DESELECT_BUTTON%%>', '<button type="submit" class="btn btn-default" id="deselect" name="deselect_x" value="1" onclick="' . $backAction . '" title="' . html_attr($Translation['Back']) . '"><i class="glyphicon glyphicon-chevron-left"></i> ' . $Translation['Back'] . '</button>', $templateCode);
437 }else{
438 $templateCode = str_replace('<%%UPDATE_BUTTON%%>', '', $templateCode);
439 $templateCode = str_replace('<%%DELETE_BUTTON%%>', '', $templateCode);
440 $templateCode = str_replace('<%%DESELECT_BUTTON%%>', ($ShowCancel ? '<button type="submit" class="btn btn-default" id="deselect" name="deselect_x" value="1" onclick="' . $backAction . '" title="' . html_attr($Translation['Back']) . '"><i class="glyphicon glyphicon-chevron-left"></i> ' . $Translation['Back'] . '</button>' : ''), $templateCode);
441 }
442
443 // set records to read only if user can't insert new records and can't edit current record
444 if(($selected_id && !$AllowUpdate && !$AllowInsert) || (!$selected_id && !$AllowInsert)){
445 $jsReadOnly .= "\tjQuery('#name').replaceWith('<div class=\"form-control-static\" id=\"name\">' + (jQuery('#name').val() || '') + '</div>');\n";
446 $jsReadOnly .= "\tjQuery('#school').prop('disabled', true).css({ color: '#555', backgroundColor: '#fff' });\n";
447 $jsReadOnly .= "\tjQuery('#school_caption').prop('disabled', true).css({ color: '#555', backgroundColor: 'white' });\n";
448 $jsReadOnly .= "\tjQuery('.select2-container').hide();\n";
449
450 $noUploads = true;
451 }elseif($AllowInsert){
452 $jsEditable .= "\tjQuery('form').eq(0).data('already_changed', true);"; // temporarily disable form change handler
453 $jsEditable .= "\tjQuery('form').eq(0).data('already_changed', false);"; // re-enable form change handler
454 }
455
456 // process combos
457 $templateCode = str_replace('<%%COMBO(school)%%>', $combo_school->HTML, $templateCode);
458 $templateCode = str_replace('<%%COMBOTEXT(school)%%>', $combo_school->MatchText, $templateCode);
459 $templateCode = str_replace('<%%URLCOMBOTEXT(school)%%>', urlencode($combo_school->MatchText), $templateCode);
460
461 /* lookup fields array: 'lookup field name' => array('parent table name', 'lookup field caption') */
462 $lookup_fields = array( 'school' => array('schools', 'School'));
463 foreach($lookup_fields as $luf => $ptfc){
464 $pt_perm = getTablePermissions($ptfc[0]);
465
466 // process foreign key links
467 if($pt_perm['view'] || $pt_perm['edit']){
468 $templateCode = str_replace("<%%PLINK({$luf})%%>", '<button type="button" class="btn btn-default view_parent hspacer-md" id="' . $ptfc[0] . '_view_parent" title="' . html_attr($Translation['View'] . ' ' . $ptfc[1]) . '"><i class="glyphicon glyphicon-eye-open"></i></button>', $templateCode);
469 }
470
471 // if user has insert permission to parent table of a lookup field, put an add new button
472 if($pt_perm['insert'] && !$_REQUEST['Embedded']){
473 $templateCode = str_replace("<%%ADDNEW({$ptfc[0]})%%>", '<button type="button" class="btn btn-success add_new_parent hspacer-md" id="' . $ptfc[0] . '_add_new" title="' . html_attr($Translation['Add New'] . ' ' . $ptfc[1]) . '"><i class="glyphicon glyphicon-plus-sign"></i></button>', $templateCode);
474 }
475 }
476
477 // process images
478 $templateCode = str_replace('<%%UPLOADFILE(id)%%>', '', $templateCode);
479 $templateCode = str_replace('<%%UPLOADFILE(name)%%>', '', $templateCode);
480 $templateCode = str_replace('<%%UPLOADFILE(school)%%>', '', $templateCode);
481
482 // process values
483 if($selected_id){
484 if( $dvprint) $templateCode = str_replace('<%%VALUE(id)%%>', safe_html($urow['id']), $templateCode);
485 if(!$dvprint) $templateCode = str_replace('<%%VALUE(id)%%>', html_attr($row['id']), $templateCode);
486 $templateCode = str_replace('<%%URLVALUE(id)%%>', urlencode($urow['id']), $templateCode);
487 if( $dvprint) $templateCode = str_replace('<%%VALUE(name)%%>', safe_html($urow['name']), $templateCode);
488 if(!$dvprint) $templateCode = str_replace('<%%VALUE(name)%%>', html_attr($row['name']), $templateCode);
489 $templateCode = str_replace('<%%URLVALUE(name)%%>', urlencode($urow['name']), $templateCode);
490 if( $dvprint) $templateCode = str_replace('<%%VALUE(school)%%>', safe_html($urow['school']), $templateCode);
491 if(!$dvprint) $templateCode = str_replace('<%%VALUE(school)%%>', html_attr($row['school']), $templateCode);
492 $templateCode = str_replace('<%%URLVALUE(school)%%>', urlencode($urow['school']), $templateCode);
493 }else{
494 $templateCode = str_replace('<%%VALUE(id)%%>', '', $templateCode);
495 $templateCode = str_replace('<%%URLVALUE(id)%%>', urlencode(''), $templateCode);
496 $templateCode = str_replace('<%%VALUE(name)%%>', '', $templateCode);
497 $templateCode = str_replace('<%%URLVALUE(name)%%>', urlencode(''), $templateCode);
498 $templateCode = str_replace('<%%VALUE(school)%%>', '', $templateCode);
499 $templateCode = str_replace('<%%URLVALUE(school)%%>', urlencode(''), $templateCode);
500 }
501
502 // process translations
503 foreach($Translation as $symbol=>$trans){
504 $templateCode = str_replace("<%%TRANSLATION($symbol)%%>", $trans, $templateCode);
505 }
506
507 // clear scrap
508 $templateCode = str_replace('<%%', '<!-- ', $templateCode);
509 $templateCode = str_replace('%%>', ' -->', $templateCode);
510
511 // hide links to inaccessible tables
512 if($_REQUEST['dvprint_x'] == ''){
513 $templateCode .= "\n\n<script>\$j(function(){\n";
514 $arrTables = getTableList();
515 foreach($arrTables as $name => $caption){
516 $templateCode .= "\t\$j('#{$name}_link').removeClass('hidden');\n";
517 $templateCode .= "\t\$j('#xs_{$name}_link').removeClass('hidden');\n";
518 }
519
520 $templateCode .= $jsReadOnly;
521 $templateCode .= $jsEditable;
522
523 if(!$selected_id){
524 }
525
526 $templateCode.="\n});</script>\n";
527 }
528
529 // ajaxed auto-fill fields
530 $templateCode .= '<script>';
531 $templateCode .= '$j(function() {';
532
533
534 $templateCode.="});";
535 $templateCode.="</script>";
536 $templateCode .= $lookups;
537
538 // handle enforced parent values for read-only lookup fields
539
540 // don't include blank images in lightbox gallery
541 $templateCode = preg_replace('/blank.gif" data-lightbox=".*?"/', 'blank.gif"', $templateCode);
542
543 // don't display empty email links
544 $templateCode=preg_replace('/<a .*?href="mailto:".*?<\/a>/', '', $templateCode);
545
546 /* default field values */
547 $rdata = $jdata = get_defaults('departments');
548 if($selected_id){
549 $jdata = get_joined_record('departments', $selected_id);
550 if($jdata === false) $jdata = get_defaults('departments');
551 $rdata = $row;
552 }
553 $templateCode .= loadView('departments-ajax-cache', array('rdata' => $rdata, 'jdata' => $jdata));
554
555 // hook: departments_dv
556 if(function_exists('departments_dv')){
557 $args=array();
558 departments_dv(($selected_id ? $selected_id : FALSE), getMemberInfo(), $templateCode, $args);
559 }
560
561 return $templateCode;
562 }
563 ?>